﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using FrbaBus.Core;

namespace FrbaBus.Abm_Micro
{
    public partial class BajaMicro : Form
    {
        public BajaMicro()
        {
            InitializeComponent();
        }
        public ModificarMicro parent = null;
        public BajaMicro(Form callingForm)
        {
            parent = callingForm as ModificarMicro;

            InitializeComponent();
        }

        public string OldPatente = null;
        public string PatenteNueva = null;
        public bool BajaDefinitiva = false;
        public DateTime to;
        public string toHora;

        public DateTime from;
        public string fromHora;
        

        private void button4_Click(object sender, EventArgs e)
        {
            DBManager db = new DBManager();
            OldPatente = String.Copy(this.parent.OldPatente);

                //SE OFRECE CREAR UN NUEVO MICRO QUE LO REEMPLACE
                Abm_Micro.AltaMicro frm = new Abm_Micro.AltaMicro(this);
                frm.ShowDialog(this);

                // TOMA LA PATENTE DEL MICRO CREADO Y SE REEMPLAZA EL VIEJO POR EL NUEVO EN VIAJES
                if (PatenteNueva != null)
                {
                    textBox1.Text = string.Copy(PatenteNueva);
                
                }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            OldPatente = String.Copy(this.parent.Row.Cells[0].Value.ToString());

            if (radioButton1.Checked == true)
                BajaDefinitiva = true;
            else if (radioButton2.Checked == true)
            {
                BajaDefinitiva = false;

                if (Foo.validacion == 1)
                {

                    if (checkBox1.Checked == true)
                    {

                        to = dateTimePicker2.Value;
                        toHora = to.ToString("yyyy-MM-dd");
                        toHora = toHora + " 23:59:00.000";

                        from = dateTimePicker1.Value;
                        fromHora = from.ToString("yyyy-MM-dd");
                        fromHora = fromHora + " 00:00:00.000";
                    }
                }
            }

            Abm_Micro.ListaPatentes frm = new Abm_Micro.ListaPatentes(this);
            frm.ShowDialog(this);

            if (PatenteNueva != null)
                textBox1.Text = string.Copy(PatenteNueva);
           }


        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked == true)
                groupBox1.Visible = true;
            if (checkBox1.Checked == false)
                groupBox1.Visible = false;
        }
        public class Foo
        {
            public static int validacion = 1;
            public static bool intervaloServicio = false;
        }

        private void BajaMicro_Load(object sender, EventArgs e)
        {
            dateTimePicker1.MinDate = Convert.ToDateTime(System.Configuration.ConfigurationManager.AppSettings["Fecha"]);
            dateTimePicker2.MinDate = Convert.ToDateTime(System.Configuration.ConfigurationManager.AppSettings["Fecha"]);
            textBox1.Text = "";
            dateTimePicker1.Text = String.Copy(this.parent.Row.Cells[9].Value.ToString());
            dateTimePicker2.Text = String.Copy(this.parent.Row.Cells[10].Value.ToString());

        }


        private void button2_Click(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true)
            {
                DBManager db = new DBManager();
                if (checkBox1.Checked == true)
                {
                    if (textBox1.Text != "")
                    {
                        // SE REEMPLAZA EL MICRO DADO DE BAJA DE VIDA UTIL POR OTRO
                        SqlCommand consulta2 = new SqlCommand("UPDATE ALL_IN.viajesActivos SET [Patente] = @Patente2" +
                        " WHERE Patente = @Patente1 AND [Fecha_Salida] > (select * from ALL_IN.Fecha_Actual)");
                        consulta2.Parameters.Add("@Patente1", SqlDbType.NVarChar)
                        .Value = String.Copy(parent.OldPatente);
                        consulta2.Parameters.Add("@Patente2", SqlDbType.NVarChar)
                        .Value = String.Copy(textBox1.Text);
                        SQLResponse r2 = db.executeQuery(consulta2);
                        SqlCommand consulta3 = new SqlCommand("UPDATE ALL_IN.Micros set Baja_Vida_Util=1,Fecha_Baja_Definitiva=( CASE WHEN (CONVERT(varchar,(select * from ALL_IN.Fecha_Actual),112) > CONVERT(varchar,Fecha_Alta,112) ) THEN " +
                       "(select * from ALL_IN.Fecha_Actual) ELSE Fecha_Alta END )WHERE Patente=@Patente");
                        consulta3.Parameters.Add("@Patente", SqlDbType.NVarChar)
                        .Value = String.Copy(parent.OldPatente);
                        SQLResponse r3 = db.executeQuery(consulta3);
                        MessageBox.Show("El Micro " + parent.OldPatente + " ha sido reemplazado por el micro " + textBox1.Text);
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Seleccione un micro para reemplazar el que se da de baja");
                    }
                }
                else
                {
                    // SE DA DE BAJA DE VIDA UTIL EL MICRO SELECCIONADO Y SE CANCELAN TODOS LOS VIAJES FUTUROS
                    SqlCommand consulta1 = new SqlCommand("DELETE from ALL_IN.viaje WHERE Patente =@Patente AND Fecha_Salida > (select * from ALL_IN.Fecha_Actual)");
                    consulta1.Parameters.Add("@Patente", SqlDbType.NVarChar)
                    .Value = String.Copy(parent.OldPatente);
                    SQLResponse r1 = db.executeQuery(consulta1);

                   //SqlCommand consulta3 = new SqlCommand("UPDATE ALL_IN.Micros set Baja_Vida_Util=1,Fecha_Baja_Definitiva=(select * from ALL_IN.Fecha_Actual) WHERE Patente=@Patente
                    SqlCommand consulta3 = new SqlCommand("UPDATE ALL_IN.Micros set Baja_Vida_Util=1,Fecha_Baja_Definitiva=( CASE WHEN (CONVERT(varchar,(select * from ALL_IN.Fecha_Actual),112) > CONVERT(varchar,Fecha_Alta,112) ) THEN " +
                       "(select * from ALL_IN.Fecha_Actual) ELSE Fecha_Alta END )WHERE Patente=@Patente");

                    consulta3.Parameters.Add("@Patente", SqlDbType.NVarChar)
                    .Value = String.Copy(parent.OldPatente);
                    SQLResponse r3 = db.executeQuery(consulta3);
                    MessageBox.Show("El Micro " + parent.OldPatente + " ha sido eliminado");
                    this.Close();
                }
            }
            else if (radioButton2.Checked == true)
            {
                Foo.validacion = 1;
                if (Foo.intervaloServicio == true)
                {
                    if (dateTimePicker1.Value < DateTime.Today)
                    {
                        MessageBox.Show("Fecha fuera de servicio debe ser futura");
                        Foo.validacion = 0;
                    }
                    else
                    {
                        if (dateTimePicker2.Value < dateTimePicker1.Value)
                        {
                            MessageBox.Show("Fecha REINICIO de servicio debe ser mayor a la de Fuera de Servicio");
                            Foo.validacion = 0;
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese fechas de fuera de servicio y reinicio de servicio");
                    Foo.validacion = 0;
                }

                DBManager db = new DBManager();

                if (Foo.validacion == 1)
                {
                    
                    if (checkBox1.Checked == true)
                    {

                        if (textBox1.Text != "")
                        {
                            // SE REEMPLAZA EL MICRO DADO DE BAJA POR SERVICIO POR OTRO
                            SqlCommand consulta2 = new SqlCommand("UPDATE ALL_IN.viajesActivos SET [Patente] = @Patente2" +
                            " WHERE Patente = @Patente1 AND Fecha_Salida between '" + fromHora + "' AND '" + toHora + "'");
                            consulta2.Parameters.Add("@Patente1", SqlDbType.NVarChar)
                            .Value = String.Copy(parent.OldPatente);
                            consulta2.Parameters.Add("@Patente2", SqlDbType.NVarChar)
                            .Value = String.Copy(textBox1.Text);
                            SQLResponse r2 = db.executeQuery(consulta2);
                            SqlCommand consulta3 = new SqlCommand("UPDATE ALL_IN.Micros set Fecha_Fuera_de_Servicio='" + fromHora +
                                "',Fecha_Reinicio_Servicio='" + toHora + "' WHERE Patente=@Patente");
                            consulta3.Parameters.Add("@Patente", SqlDbType.NVarChar)
                            .Value = String.Copy(parent.OldPatente);
                            SQLResponse r3 = db.executeQuery(consulta3);
                            // insertar tabla de fuera de servicios
                            SqlCommand consulta4 = new SqlCommand(
                                "delete from ALL_IN.Fuera_Servicio where Patente = '" + parent.OldPatente +
                            "' AND ( Fecha_Fuera_de_Servicio between '" + fromHora + "' AND '"
                            + toHora + "' OR Fecha_Reinicio_Servicio between '" + fromHora + "' AND '" + toHora + "' OR '" +
                            fromHora + "' between Fecha_Fuera_de_Servicio AND Fecha_Reinicio_Servicio OR '" +
                            toHora + "' between Fecha_Fuera_de_Servicio AND Fecha_Reinicio_Servicio )");
                            SQLResponse r4 = db.executeQuery(consulta4);

                            // SE CARGAN FECHAS EN BAJA DE SERVICIO

                            SqlCommand consulta5 = new SqlCommand(
                                "insert into ALL_IN.Fuera_Servicio(Fecha_Fuera_de_Servicio,Fecha_Reinicio_Servicio,Patente) " +
                                "values('" + fromHora + "','" + toHora + "','" + parent.OldPatente + "')");
                            SQLResponse r5 = db.executeQuery(consulta5);

                            MessageBox.Show("El Micro " + parent.OldPatente + " ha sido reemplazado por el micro " + textBox1.Text);
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("Seleccione un micro para reemplazar el que se da de baja");
                        }
                    }
                    else
                    {
                        to = dateTimePicker2.Value;
                        toHora = to.ToString("yyyy-MM-dd");
                        toHora = toHora + " 23:59:00.000";

                        from = dateTimePicker1.Value;
                        fromHora = from.ToString("yyyy-MM-dd");
                        fromHora = fromHora + " 00:00:00.000";
                        // SE DA DE BAJA POR SERVICIO EL MICRO SELECCIONADO Y SE CANCELAN TODOS LOS VIAJES EN EL INTERVALO
                        SqlCommand consulta1 = new SqlCommand("DELETE from ALL_IN.viaje WHERE Patente = '" + parent.OldPatente +
                        "' AND Fecha_Salida between '" + fromHora + "' AND '" + toHora + "'");
                        SQLResponse r1 = db.executeQuery(consulta1);
                        SqlCommand consulta3 = new SqlCommand("UPDATE ALL_IN.Micros set Fecha_Fuera_de_Servicio='" + fromHora +
                                "',Fecha_Reinicio_Servicio='" + toHora + "' WHERE Patente=@Patente");
                        consulta3.Parameters.Add("@Patente", SqlDbType.NVarChar)
                        .Value = String.Copy(parent.OldPatente);
                        SQLResponse r3 = db.executeQuery(consulta3);
                        // insertar tabla de fuera de servicios
                        SqlCommand consulta4 = new SqlCommand(
                            "delete from ALL_IN.Fuera_Servicio where Patente = '" + parent.OldPatente +
                        "' AND ( Fecha_Fuera_de_Servicio between '" + fromHora + "' AND '"
                        + toHora + "' OR Fecha_Reinicio_Servicio between '" + fromHora + "' AND '" + toHora + "' OR '" +
                        fromHora + "' between Fecha_Fuera_de_Servicio AND Fecha_Reinicio_Servicio OR '" +
                        toHora + "' between Fecha_Fuera_de_Servicio AND Fecha_Reinicio_Servicio )");
                        SQLResponse r4 = db.executeQuery(consulta4);
                       
                        // SE CARGAN FECHAS EN BAJA DE SERVICIO

                        SqlCommand consulta5 = new SqlCommand(
                            "insert into ALL_IN.Fuera_Servicio(Fecha_Fuera_de_Servicio,Fecha_Reinicio_Servicio,Patente) " +
                            "values('" + fromHora + "','" + toHora + "','" + parent.OldPatente + "')");
                        SQLResponse r5 = db.executeQuery(consulta5);
                        MessageBox.Show("El Micro " + parent.OldPatente + " ha sido eliminado");
                        this.Close();
                    }
                }
                
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            groupBox3.Visible = false;
            if (radioButton1.Checked == true)
                BajaDefinitiva = true;
            else if (radioButton2.Checked == true)
                BajaDefinitiva = false;
            
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            groupBox3.Visible = true;
            if (radioButton1.Checked == true)
                BajaDefinitiva = true;
            else if (radioButton2.Checked == true)
                BajaDefinitiva = false;

        }

        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            Foo.intervaloServicio = true;
            textBox1.Text = "";
        }

        private void dateTimePicker2_ValueChanged(object sender, EventArgs e)
        {
            Foo.intervaloServicio = true;
            textBox1.Text = "";
        }

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }
    }
}
